<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script src="./js/lodash.js"></script>
    <script>
      // _.defer(func, [args]): 推迟调用func，直到当前堆栈清理完毕。 调用时，任何附加的参数会传给func。
      _.defer(function (text) {
        console.log(text);
      }, "第二次事件循环");
      console.log("第一次事件循环");

      // _.delay(func, wait, [args])：延迟 wait 毫秒后调用 func。 调用时，任何附加的参数会传给func。
      _.delay(
        function (test) {
          console.log("first", test);
        },
        1000,
        "延迟一秒执行"
      );

      // _.flip(func): 创建一个函数，调用func时候接收翻转的参数。
      function fn1() {
        console.log(arguments);
      }

      fn1 = _.flip(fn1);
      fn1(1, 2, 3);

      // _.negate(predicate)
      function fn2(n) {
        return n % 2 === 0;
      }
      console.log(_.filter([1, 2, 3, 4, 5, 6], _.negate(fn2)));

      // _.once(func): 创建一个只能调用 func 一次的函数。 重复调用返回第一次调用的结果。 func 调用时， this 绑定到创建的函数，并传入对应参数。
      function fn3() {
        console.log("fn3");
      }
      const newFn3 = _.once(fn3);
      newFn3();
      newFn3();
    </script>
  </body>
</html>
